from collections import Counter
from itertools import accumulate
from typing import List

# 用哈希表统计每个数在序列中出现的次数，假设数字 k 在序列中出现的次数为 v，那么满足题目中所说的prexor(nums[i])=prexor(nums[j])=k(i<j)
# 的 (i,j)的数量就是 v*(v-1)/2，即 k 这个数值对答案的贡献是 v*(v-1)/2。我们只需要把所有数值的贡献相加，即可得到答案。
class Solution:
    def beautifulSubarrays(self, nums: List[int]) -> int:
        from operator import xor
        return sum(v * (v - 1) >> 1 for v in Counter(accumulate(nums, xor, initial = 0)).values())